/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servlets;

import db.Documento;
import jade.wrapper.gateway.JadeGateway;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javazoom.upload.MultipartFormDataRequest;
import javazoom.upload.UploadBean;
import javazoom.upload.UploadFile;
import transporte.Intermediario;

/**
 *
 * @author hayner Benavides Moreno y Jorge Hernan Londoño Echeverri
 */
public class ServletPaso extends HttpServlet {
   
   @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if (MultipartFormDataRequest.isMultipartFormData(req))// si el tipo de contenido es Multipart/form-data
        {
            try{
             
                MultipartFormDataRequest mrequest = new MultipartFormDataRequest(req);
                if(mrequest!=null){
                    String comando = mrequest.getParameter("comando");
                    System.out.println("comando: "+comando);// recibe el comando, nombre d el ainstruccion a ejecutar
                    
                    if(comando.equals("agregar")){// si el comando es agregar
                        Documento documento = CrearDocumento(mrequest);// obtener una definición de doucmento y guardar el archivo enviado desde la pagina para cargar
                        if(documento!=null){//si se logro adecuadamente
                            HttpSession sesion = req.getSession(true);// se obtienen la sesion y la lista d edopumentos que ya estan
                            List<Documento> documentos =(List<Documento>) sesion.getAttribute("documentos");
                            if(documentos == null){
                                documentos = new ArrayList<Documento>();
                            }
                            documentos.add(documento);// se adiciona el docuemnto
                            sesion.setAttribute("documentos", documentos);
                            req.getSession().setAttribute("mensaje", "El archivo ha sido aceptado");
                        }
                        else{//si algo fallo
                            req.getSession().setAttribute("mensaje", "Ocurrio un problema en la carga, lo mas problable sea que a extensión del archivo no es valida");
                        }

                    }
                    else if(comando.equals("enviar")){// con este comando se envia los docuentos al agente
                        Intermediario mensajero = new Intermediario();
                        HttpSession sesion = req.getSession();// se obtienen los documentos desde la sesion
                        List<Documento> documentos = (List<Documento>)sesion.getAttribute("documentos");
                        if(documentos !=null){
                            for(Documento doc:documentos){
                                mensajero.setDocumento(doc.getRuta()+doc.getNombre());
                            }
                            sesion.setAttribute("documentos", null);
                            JadeGateway.execute(mensajero);// ejecuta el proceso del agente agente
                            req.getSession().setAttribute("mensaje", "Los documentos han sido enviados para extraer sus definiciones");
                        }
                    }
                    else if(comando.equals("eliminar")){// si se quiere quitar  un documento para no enviarlo
                        String indice = mrequest.getParameter("indice");
                        if(indice!=null && !indice.equals("")){// si se tiene un valor que indique cual va a quitar
                            int index = Integer.parseInt(indice);
                            List<Documento> listado =(List<Documento>) req.getSession().getAttribute("documentos");
                            Documento documento = listado.get(index);
                            File archivo = new File(documento.getRuta()+documento.getNombre());
                            if(archivo.exists()){// se revisa si existe, en caso tal se elimina
                                archivo.delete();
                            }
                            listado.remove(index);// se remueve de la lista
                            req.getSession().setAttribute("documentos", listado);
                        }
                    }                    
                    
                }
            }
            catch(Exception e){
                e.printStackTrace();
            }
            finally{// al terminar vuelve  la pagina index.jsp
                getServletContext().getRequestDispatcher("/index.jsp").forward(req, resp);
            }
        }
               
    }

    @Override
    public void init() throws ServletException {
        super.init();       
        JadeGateway.init("agentes.AgenteUsuario", null);// iniciamos el agenteUsuario
    }

    public Documento CrearDocumento(MultipartFormDataRequest mrequest){
        Documento documento= new Documento();
        System.out.println(getServletContext().getRealPath(""));
                //mrequest.getRequest().getLocalName()+":"+mrequest.getRequest().getLocalPort());
               
        String ruta="C:/extractor/cuerpos/";//carpeta por defecto para guardar los documentos cargados
        try{            
                
            Hashtable files = mrequest.getFiles();
            if ( (files != null) && (!files.isEmpty()) )// si hay archivo para guardar, se guarda al primero
            {
                //Date fecha = new Date();
                UploadFile file = (UploadFile) files.get("archivo");
                //file.setFileName(fecha.getTime()+"_"+file.getFileName());

                String extension = file.getFileName();
                extension = extension.substring(extension.lastIndexOf('.'));
                
                if(extension.equals(".txt")){// se verifica la extensión, el sistema solo acepta archivos con extensión .txt
                    //se construye el documentos
                    documento.setNombre(file.getFileName());
                    documento.setRuta(ruta);

                    File archivo = new File(ruta+documento.getNombre());

                    if(archivo.exists()){// si ya existe ese docuemtnos se elimina
                        archivo.delete();
                    }
                    // se guarda la información
                    UploadBean upBean = new UploadBean();
                    upBean.setFolderstore(ruta);
                    upBean.store(mrequest, "archivo");
                }
                else{
                    return null; // si hubo problemas se retorna un objeto nulo
                }
            }
            
        }catch(Exception e){// en caso de alguna excepcion
            //System.out.println("Error al insertar el registro");
            return null;
        }
        return documento;
    }
} 

  


